package com.template.method.demo03;

public abstract class HummerModel {
    // 不用对外提供,只需子类实现,因此protected
    protected abstract void start();
    protected abstract void alarm();
    protected abstract void engineBoom();
    protected abstract void stop();

    // 对外提供一个开关,方便控制是否鸣笛.默认鸣笛(由子类重写逻辑控制是否鸣笛)
    protected boolean isAlarm(){
        return true;
    }

    // 模板方法
    public void run(){
        this.start();
        this.engineBoom();
        if (isAlarm()) {
            this.alarm();
        }
        this.stop();
    }
}
